<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function Person(name, age) {
            this.name = name
            this.age = age
        }
        Person.prototype.do = function () {
            console.log('666');
        }
        function myNew(constr,...args) {
            const obj = {}
            const re = constr.apply(obj,args)
            obj.__proto__ = constr.prototype
            if(typeof re === 'object' && re !== null || typeof re === 'function'){
                return re
            }else{
                return obj
            }
        }
        // function myNew(constr,...args) {
        //     const obj = {}

        //     const re = constr.apply(obj,args)
        //     obj.__proto__ = constr.prototype
        //     if(typeof re === 'object' && re !== null || typeof re === 'function'){
        //         return re
        //     }else {
        //         return obj
        //     }
        // }
        // function myNew(constr, ...args) {
        //     //1.创建一个对象
        //     const obj = {};

        //     //2.调用构造函数把构造函数的this指向我们创建的对象
        //     const re = constr.apply(obj, args)

        //     //3.把obj的隐式原型指向构造函数的原型对象
        //     obj.__proto__ = constr.prototype;

        //     //4.返回值(判断构造函数的返回值是基本类型还是引用类型)
        //     if (typeof re === 'object' && re !== null || typeof re === "function") {
        //         return re;
        //     } else {
        //         return obj
        //     }
        // }
        const p1 = myNew(Person, "laowang", 18)
        console.log(p1, "p1");
    </script>
</body>

</html>